package ar.uade.edu.fain.ad.common.remote;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

import ar.uade.edu.fain.ad.common.exception.OrdenCompraInexistenteException;
import ar.uade.edu.fain.ad.common.exception.ProductoInexistenteException;
import ar.uade.edu.fain.ad.common.transfer.ImportacionRemitoVO;
import ar.uade.edu.fain.ad.common.transfer.NotaDevolucionVO;
import ar.uade.edu.fain.ad.common.transfer.ProductoVO;
import ar.uade.edu.fain.ad.common.transfer.RemitoVO;

public interface SwingProcessRemoto extends Remote {

	/**
	 * CU11. Procesamiento de un remito contra las ordenes de compra en el 
	 * sistema. El cliente puede tomar esta info desde un XML, o por pantalla, 
	 * es indistinto para el servidor el origen de la info.
	 * @param remitoVO informacion del remito
	 * @return el resultado de la importacion del remito
	 * @throws RemoteException
	 */
	public abstract ImportacionRemitoVO procesarRemito(RemitoVO remitoVO) 
			throws ProductoInexistenteException,
			OrdenCompraInexistenteException, RemoteException;
	
	/**
	 * CU12. lista devoluciones.
	 * 
	 * @param <NotaDevolucion>
	 * @return lista de devoluciones, producto-proveedor
	 * @throws RemoteException
	 */
	public List<NotaDevolucionVO> buscarDevoluciones() throws RemoteException;

	/**
	 * CU13. Registrar movimiento de mercader�a.
	 * 
	 * @param <ListaDeProductos>
	 * @return void
	 * @throws RemoteException
	 */

	public void registrarMercaderia(List<ProductoVO> mercaderias)
			throws RemoteException;

	/**
	 * CU14. Controlar existencias en deposito.
	 * 
	 * @param <void>
	 * @return void
	 * @throws RemoteException
	 */

	public List<ProductoVO> controlarMercaderiaDeposito()
			throws RemoteException;

}
